# coding:utf-8
"""
Author: 11203
Date:  14:43
Name: command
# flask_script执行脚本
"""
from datetime import datetime

import click
from flask import Flask

from common.models import db
from common.models.user import User


# from flask_script import Manager # flask-script 内部引用了 flask._compat 模块，但这个模块在 Flask 2.0 及以上版本中已经被移除了

# from shopping import create_app

# 开发环境：develop
# 正式环境：product
# env_name = 'develop'
# app = create_app(env_name)

# manager = Manager(app) Flask-Script最新版本已有兼容性问题，此处移除

# 测试函数
# @manager.command
# def hello():
#     print('hello flask-script!')
#
# if __name__ == '__main__':
    # manager.run()


# User用户模型类
# class User(db.Model):
#     # 映射表名: t_user
#     __tablename__ = 't_user'
#
#     # 主键（大整型，主键，自增）
#     id = db.Column(db.BIGINT, primary_key=True, autoincrement=True, doc='主键ID')
#     ...

# 这种方式代替了flask-script插件: 由于 Flask 1.0+ 已经内置了命令行功能，不再需要依赖 flask-script
def command(app: Flask):

    # 执行命令create_table
    @app.cli.command()
    def create_table():
        db.create_all()

    # 执行命令init_user_data
    # init_user_data 对应的命令是：flask init-user-data --uname admin --upwd 123456
    # 这里使用的可选参数命令
    # 还可以使用装饰器：@click.argument('uname') -> 传参是以位置参数进行传参：flask init-user-data admin 123456

    ######
    # @click.option('--age', type=int, help='User age (integer)')
    # @click.option('--is-student', is_flag=True, help='Whether user is a student') # 还能给与反馈提示 ，以及默认参数值
    # @click.argument('name')
    ######
    @app.cli.command()
    @click.option('-u', '--uname')
    @click.option('-p', '--upwd')
    def init_user_data(uname, upwd):
        user = User(username=uname, password=upwd)
        db.session.add(user)
        db.session.commit()
        print('用户：%s 添加成功. ' % (uname))




